// #ifndef VUE3
import Vue from "vue"
import App from "./App"

Vue.config.productionTip = false

App.mpType = "app"

const app = new Vue({
  ...App,
})
app.$mount()
// #endif

// 导入认证工具函数
import { handleTokenExpired } from "./utils/auth"

// @escook/request-miniprogram 网络请求
import { $http } from "@escook/request-miniprogram"
// 在 uni-app 项目中，可以把 $http 挂载到 uni 顶级对象之上，方便全局调用
uni.$http = $http
//请求根路径
$http.baseUrl = "https://www.liujie.cyou"

// 请求拦截器
$http.beforeRequest = (options) => {
  // 提示加载中
  uni.showLoading({
    title: "数据加载中...",
  })
  // 请求头添加token
  const token = uni.getStorageSync("token")
  console.log(token)
  if (token) {
    options.header = {
      ...options.header,
      Authorization: 'Bearer ' + token,
    }
  }
}

// 响应拦截器
$http.afterRequest = (res) => {
  // 关闭提示
  uni.hideLoading()

  // 检查响应数据是否为空或出错
  if (!res.data || res.statusCode !== 200) {
    uni.showToast({
      title: "数据获取失败",
      icon: "none",
      duration: 2000,
    })
  }  
  // 处理token过期情况
  handleTokenExpired(res)
}

// 添加全局错误处理
uni.addInterceptor('request', {
  fail: (err) => {
    // 关闭加载提示
    uni.hideLoading()
    
    // 检查是否是网络错误
    if (err.errMsg && err.errMsg.includes('request:fail')) {
      uni.showToast({
        title: '网络连接失败，请检查网络设置',
        icon: 'none'
      })
    }
    console.error('请求错误:', err)
  }
})

// #ifdef VUE3
import { createSSRApp } from "vue"
import { createPinia } from "pinia"
import myApp from "./App.vue"
// 创建 Pinia 实例
const pinia = createPinia()
export function createApp() {
  const app = createSSRApp(myApp)
  // 将 Pinia 实例安装到 Vue 应用中
  app.use(pinia)
  return {
    app,
  }
}
// #endif